package com.aiyige.model;

import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;

import com.aiyige.MyApp;
import com.aiyige.page.my.settings.VersionUtil;
import com.aiyige.utils.AccountUtil;
import com.aiyige.utils.crash.CrashUtils;
import com.vondear.rxtools.RxDeviceTool;
import com.vondear.rxtools.RxNetTool;

/**
 * 爱一格 日志系统 数据模型
 */
public class AiyigeExceptionModel {

    // ● 0表示低，可以不解决但需要优化；
    // ●  1表示普通，需要关注，并在下一次迭代版本中解决；
    // ●  2表示重要，需要在短时间内解决；
    // ●  3表示非常重要，需要立即解决；需要通知给开发人员
    // ●  4表示致命错误，需要通知到；需要通知给相应开发人员和高管
    public final static int rating_0 = 0;
    public final static int rating_1 = 1;
    public final static int rating_2 = 2;
    public final static int rating_3 = 3;
    public final static int rating_4 = 4;


    public final static String type_video_player = "video_player";
    public final static String type_json_parsing = "json_parsing";
    public final static String type_network_timeout = "network_timeout";
    public final static String type_app_crash = "app_crash";
    public final static String type_high_memory = "high_memory";
    public final static String type_server_error_500 = "server_error_500";
    public final static String type_pay_error = "pay_error";
    public final static String type_im_login_exception = "im_not_login_exception";

    // 1. 序号id
    private String type = "app_crash";// 2. 错误类型type
    // ● 视频播放异常 video_player
    // ● json解析 json_parsing
    // ● 网络超时 network_timeout
    // ● 崩溃 app_crash
    // ● 高内存消耗或卡顿 high_memory
    // ● 服务器错误返回：500 server_error_500
    private int rating;// 3. 错误等级rating
    // ● 0表示低，可以不解决但需要优化；
    // ●  1表示普通，需要关注，并在下一次迭代版本中解决；
    // ●  2表示重要，需要在短时间内解决；
    // ●  3表示非常重要，需要立即解决；需要通知给开发人员
    // ●  4表示致命错误，需要通知到；需要通知给相应开发人员和高管
    private String device_from = "app_android";// 4. 来源 device_from
    // ● app_android
    // ● app_ios
    // ● h5_android
    // ● h5_ios
    // ● pc_h5
    // ● server
    private String phone = getUserPhone();// 5. phone 用户手机号
    private String user_id = getUserId();// 6. user_id 用户id


    private String user_nickname = getUserName();// 6. user_id 用户id
    private String device_name = RxDeviceTool.getBuildBrandModel();// 7. device_name 设备名称（iphone x ）
    private String device_brand = RxDeviceTool.getBuildBrand();// 8. device_brand 设备品牌（iphone 或 android）
    private String address_info = CrashUtils.address_info;// 9. wan_ip 广域网ip
    private String lan_ip = getLanIp();// 10. lan_ip 局域网ip
    private String net_type = getNetStatus();// 11. net_type
    // ● wifi
    // ● 3g
    // ● 4g
    private int net_connected = RxNetTool.isConnected(getContext()) ? 1 : 0;// 12. net_connected 网络是否已连接
    // ● 0 未连接
    // ● 1 已连接
    private String mac_address = "";// RxDeviceTool.getMacAddress();// 13. mac_address 物理地址
    private int log_status;// 14. log_status
    // ● 0 未解决
    // ● 1  已解决
    // ● 2 不用解决，可以忽略不计
    // ● 3 暂时挂起
    // ● 4 延迟解决
    private String info;// 具体详细信息

    // 15. create_date 创建时间，服务器自动生成系统时间

    private String osVersion = android.os.Build.VERSION.RELEASE;// 系统版本

    private String appVersion = VersionUtil.getCurrentVersion(getContext());

    public String getOsVersion() {
        return osVersion;
    }

    public String getAppVersion() {
        return appVersion;
    }


    private Context getContext() {
        return MyApp.getAppContext();
    }

    private String getLanIp() {
        WifiManager wm = (WifiManager) getContext().getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        //检查Wifi状态
        if (!wm.isWifiEnabled()) {
            return "";
        }
        WifiInfo wi = wm.getConnectionInfo();
        //获取32位整型IP地址
        int ipAdd = wi.getIpAddress();
        //把整型地址转换成“*.*.*.*”地址
        String ip = intToIp(ipAdd);
        return ip;
    }

    private String intToIp(int i) {
        return (i & 0xFF) + "." +
                ((i >> 8) & 0xFF) + "." +
                ((i >> 16) & 0xFF) + "." +
                (i >> 24 & 0xFF);
    }


    private String getNetStatus() {
        if (RxNetTool.isWifi(getContext())) {
            return "WIFI";
        } else if (RxNetTool.is4G(getContext())) {
            return "4G";
        } else if (RxNetTool.is3rd(getContext())) {
            return "3G";
        } else {
            return "unknown";
        }
    }


    private String getUserPhone() {
        return AccountUtil.getCurrentUser().mobile;
    }

    private String getUserId() {
        return AccountUtil.getCurrentUser().getId();
    }

    private String getUserName() {
        return AccountUtil.getCurrentUser().getAccount();
    }


    public String getUser_nickname() {
        return user_nickname;
    }

    public String getDevice_from() {
        return device_from;
    }

    public String getPhone() {
        return phone;
    }


    public String getUser_id() {
        return user_id;
    }


    public String getDevice_name() {
        return device_name;
    }


    public String getDevice_brand() {
        return device_brand;
    }


    public String getAddress_info() {
        return address_info;
    }


    public String getLan_ip() {
        return lan_ip;
    }

    public String getNet_type() {
        return net_type;
    }


    public int getNet_connected() {
        return net_connected;
    }

    public String getMac_address() {
        return mac_address;
    }


    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public int getRating() {
        return rating;
    }

    public void setRating(int rating) {
        this.rating = rating;
    }


    public int getLog_status() {
        return log_status;
    }


    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }
}
